<?php 
function create_zip($files = array(),$destination = '',$overwrite = false) {
	//if the zip file already exists and overwrite is false, return false
	if(file_exists($destination) && !$overwrite) { return false; }
	//vars
	$valid_files = array();
	//if files were passed in...
	if(is_array($files)) {
		//cycle through each file
		foreach($files as $file) {
			//make sure the file exists
			if(file_exists($file)) {
				$valid_files[] = $file;
			}
		}
	}
	else
		$valid_files[] = $files;
	
	//if we have good files...
	if(count($valid_files)) {
		//create the archive
		$zip = new ZipArchive();
		if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
			return false;
		}
		//add the files
		foreach($valid_files as $file) {
			$zip->addFile($file,$file);
		}
		//debug
		//echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;

		//close the zip -- done!
		$zip->close();

		//check to make sure the file exists
		return file_exists($destination);
	}
	else
	{
		return false;
	}
}

function extract_zip($srcFileName, $destination = ''){
	$zip = new ZipArchive;
	$res = $zip->open($srcFileName);
	if ($res === TRUE) {
		$zip->extractTo($destination);
		$zip->close();
	}
}

function read_and_delete_line($filename, $lineN) {
  $file = file($filename);
  $output = $file[$lineN];
  unset($file[$lineN]);
  file_put_contents($filename, $file);
  return $output;
}

function debug(){
	
}


function outputProgress($current, $total) {
	echo "<span style='position: absolute;z-index:$current;background:#FFF;'>" . round($current / $total * 100) . "% </span>";
			myFlush();
			sleep(1);
}

/**
* Flush output buffer
 */
 function myFlush() {
 echo(str_repeat(' ', 256));
 		if (@ob_get_contents()) {
 		@ob_end_flush();
 		}
 		flush();
 }
 
 
 class TimerLoad{
 	private $stopTime;
 	
 	public function __construct($interval_ms){
 		$this->stopTime = microtime(true) + ($interval_ms/1000);
 	}
 	
 	public function IsExpired(){
 		if(microtime(true) >= $this->stopTime)
 			return true;
 		return false;
 	}
 }


?>